import Variable from "../constants/index";
import {   ResponseData } from "../types/common";
import { HttpMethod } from "../types/enum";
// 坑点-前端会默认找目录下的index文件
// 原生的微信小程序不能找，必须拼上全路径


export default class RequestHttp  {
  // T的类型其实是code/msg/data中data的类型
  static get<T>(url: string, params?: object) {
   return request<T>(url, HttpMethod.GET, params)
  }
  static post () {}
  static put() {}
  static delete() {}
}

function request <T>(url: string, method: HttpMethod, data?: object) {
  // Promise要确定返回的类型
 return new Promise<T>((resolve, reject) => {
   // code msg data: ?
   wx.request<ResponseData<T>>({
     url: Variable.BASE_URL + url,
     method,
     data, // axios是get参数是params，post/put参数是data
     success(res) {
       if(res.data.code === 200) {
         // 此时认为成功
         resolve(res.data.data) // 这里不能反推类型
         // pending = fullfiled
       }else {
         wx.showToast({
           title: res.data.msg, // 弹出错误信息
           icon: 'error' // 错误图标
         })
         reject(new Error(res.data.msg))
         // pending => rejected
       }
      
     },
     fail(res) {
      reject(new Error(res.errMsg))
     }
   })
   // axios的get参数要传递params字段
   // axios的postbody参数要传递data字段
   // wx.request一律都叫data
   
 })
 // wx.request不支持promise
}